menu:
	proc options(main);
	/********************************************************
	*       Inventory Control / Point of Sale Program       *
	*                                                       *
	*                 Copyright(c) 1981                     *
	*                 Digital Research                      *
	*                 Box 579                               *
	*                 Pacific Grove, CA                     *
	*                 93950                                 *
	*                                                       *
	* This program is tutorial in nature and thus permis-   *
	* sion is hereby granted to those individuals who have  *
	* received an ISV Seminar completion certificate the    *
	* right to copy or abstract all or portions of this pro-*
	* gram for the purpose of extending or customizing to a *
	* particular application or software product, in which  *
	* case an appropriate credit to Digital Research should *
	* be included in the source listing.                    *
	********************************************************/
	dcl
		copyright char(37) static init
		(' Copyright(c) 1981, Digital Research ');
	%replace
		true   by '1'b,
		false  by '0'b,
		update by  0,   /* access(0) = update */
		sale   by  1;   /* access(1) = sale   */
	dcl
		setdef    entry,
		setkey    entry,
		create    entry,
		access	  entry(fixed),
		report    entry;
	dcl
		prc_start fixed ext,
		prc_len   fixed ext,
		qty_start fixed ext,
		qty_len   fixed ext,
		sales_tax dec(4,2) ext,
		key_hdr   ptr ext;
	dcl
		F  char(2) var,
		Fi fixed(7);
	dcl
		list  file,
		def   file,
		data  file,
		sysin file;

	on endfile(sysin)
		stop;

	/* initialize field definitions */
	call setdef();
	call setkey();

		/* process each major request */
		do while(true);
		put edit('Select Function:',
				'Create(c)',
				'Update(u)',
				'Sale  (s)',
				'Report(r)',
				'Quit  (q) ')
			(skip(3), a, 100(column(10),a));
		get list(F);
		Fi = index('cusrq',F);
		if length(F) ^= 1 then
			Fi = 0;
		go to case(Fi);

		case(0):
			/* invalid entry */
			put skip list
				('"' || F || '" is invalid, retry');
			go to endcase;

		case(1):
			/* create */
			call create();
			call setkey();
			go to endcase;

		case(2):
			/* update */
			call access(update);
			go to endcase;

		case(3):
			/* sale */
			call access(sale);
			go to endcase;

		case(4):
			/* report */
			call report();
			go to endcase;

		case(5):
			/* quit */
			signal endfile(sysin);
		endcase:
		end;
	end menu;
